﻿#pragma once
#include "DataInput.h"
#include "DataOutput.h"
#include "File.h"
#include "array/Array.hpp"
#include "yzrutil.h"
#include <fstream>

namespace yzrilyzr_io{
	ECLASS(RandomAccessFile, public DataInput, public DataOutput){
	private:
	std::fstream fst;
	yzrilyzr_lang::String filePath;
	void open(const yzrilyzr_lang::String & fileName, const yzrilyzr_lang::String & mode);
	void checkOpen();
	public:
	RandomAccessFile(const File & file, const yzrilyzr_lang::String & mode);
	RandomAccessFile(const yzrilyzr_lang::String & file, const yzrilyzr_lang::String & mode);
	void write(int32_t b);
	void write(const yzrilyzr_array::ByteArray & b)override;
	void write(const yzrilyzr_array::ByteArray & b, u_index off, u_index len)override;
	int32_t read();
	u_index read(yzrilyzr_array::ByteArray & b);
	u_index read(yzrilyzr_array::ByteArray & b, u_index off, u_index len);
	void readFully(yzrilyzr_array::ByteArray & b, u_index off, u_index len)override;
	void close();
	u_index skipBytes(u_index n)override;
	u_index getFilePointer();
	u_index length();
	void setLength(u_index newLength);
	void seek(u_index pos);
	};
}